home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / pctmay86.arc / STRUCTS.H < prev   
C/C++ Source or Header  |  1986-03-11  |  4KB  |  119 lines

  1. /*  ==============================================
  2. **  structs.h -- These are various data structures
  3. **               for use with Microsoft MS-DOS
  4. **               function calls.
  5. **  ==============================================
  6. */
  7. /*  ms_date -- packed date format used in directory */
  8. struct ms_date {
  9.   unsigned d : 5;
  10.   unsigned m : 4;
  11.   unsigned y : 7;
  12. };
  13. /*  ms_time -- packed time format used in directory */
  14. struct ms_time {
  15.   unsigned xx : 5;
  16.   unsigned mm : 6;
  17.   unsigned hh : 5;
  18. };
  19. /*  extended_header -- header used in constructing an
  20. **                     extended file control block.
  21. */
  22. struct extended_header {
  23.   char header;
  24.   char zeros[5];
  25.   char attrib;
  26. };
  27. /*  ext_fcb -- extended file control block */
  28. struct ext_fcb {
  29.   struct extended_header fcb_hdr;
  30.   char drive_id;
  31.   char file_name[8];
  32.   char file_extension[3];
  33.   unsigned curblok;
  34.   unsigned recsize;
  35.   long file_size;
  36.   struct ms_date date;
  37.   struct ms_time time;
  38.   char reserved[8];
  39.   char rec_in_blok;
  40.   long rel_record;
  41. };
  42. /* Macros & values used in interpreting FAT entries */
  43. #define AVAILABLE 0x0000
  44. #define MAX_12BIT 0x0FF6
  45. #define LOCKED_OUT(IS12) (IS12 ? 0x0FF7 : 0xFFF7)
  46. #define LAST_CLUSTER(IS12) (IS12 ? 0xFFF : 0xFFFF)
  47.  
  48. /* Bits used in attribute field of directory entry */
  49. #define READ_ONLY 0x01
  50. #define HIDDEN    0x02
  51. #define SYSTEM    0x04
  52. #define VOL_ENTRY 0x08
  53. #define DIRECTORY 0x10
  54. #define ARCHIVE   0x20
  55.  
  56. /*  entry -- directory entry structure */
  57. struct entry {
  58.   char drive_no;
  59.   char filname[11];
  60.   char attributes;
  61.   char unused[10];
  62.   struct ms_time create_time;
  63.   struct ms_date create_date;
  64.   unsigned first_cluster;
  65.   long filsize;
  66. };
  67. /*  extended_entry -- directory structure for use with
  68. **                    extended file search
  69. */
  70. struct extended_entry {
  71.   struct extended_header dir_hdr;
  72.   struct entry body;
  73. };
  74. /*  boot - layout of beginning of DOS boot record */
  75. struct boot {
  76.   unsigned char jump[3];
  77.   unsigned char oem_name[8];          /* OEM */
  78.   unsigned bytes_per_sector;          /* BPS */
  79.   unsigned char sectors_per_au;       /* SPC */
  80.   unsigned reserved_sectors;          /* RS  */
  81.   unsigned char number_of_fats;       /* CF  */
  82.   unsigned number_of_entries;         /* D   */
  83.   unsigned number_of_sectors;         /* TS  */
  84.   unsigned char media_descriptor;     /* MD  */
  85.   unsigned fat_size;                  /* SPF */
  86.   unsigned sectors_per_track;         /* SPT */
  87.   unsigned number_of_heads;           /* NH  */
  88.   unsigned hidden_sectors;            /* HS  */
  89. };
  90. /*  dd_header -- layout of DOS device driver header */
  91. struct dd_header {
  92.   struct dd_header far *link; /* chain to next header     */
  93.   int attributes;             /* device attributes        */
  94.   int strategy;               /* strategy routine addr    */
  95.   int interrupt;              /* interrupt routine addr   */
  96.   char name[8];               /* device name field        */
  97. };
  98.  
  99. /*  disk_table -- layout of table returned by fn 32 */
  100. struct disk_table {
  101.   char designator;            /* PD                       */
  102.   char alt_designator;        /* As above; 0 if RAMdisk   */
  103.   unsigned sector_size;       /* BPS                      */
  104.   char cluster_size;          /* SPC - 1                  */
  105.   char heads;                 /* NH  - 1                  */
  106.   unsigned fat_start;         /* RS                       */
  107.   char fat_copies;            /* CF                       */
  108.   unsigned max_entries;       /* D                        */
  109.   unsigned first_sector;      /* FUS                      */
  110.   unsigned last_cluster;      /* TCC + 1                  */
  111.   unsigned char fat_size;     /* SPF                      */
  112.   unsigned dir_start;         /* FDS                      */
  113.   struct dd_header far *ddh;  /* DDA                      */
  114.   unsigned media_type;        /* MD                       */
  115.   struct disk_table far *nxt; /* chain to next disk_table */
  116.   unsigned subdir_cluster;    /* CWD cluster (DOS 2 only) */
  117.   char subdirectory[64];      /* CWD         (DOS 2 only) */
  118. };
  119.